package com.bookocean.controller;

import com.bookocean.application.common.Result;
import com.bookocean.application.service.CloudHanApplicationService;
import com.bookocean.controller.dto.CloudHanPostDto;
import com.bookocean.controller.dto.CommentDto;
import com.bookocean.controller.dto.PageResultDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;

/**
 * 云汉页面控制器
 * 
 * @author BookOcean
 * @since 2024-01-01
 */
@RestController
@RequestMapping("/book-quote")
@RequiredArgsConstructor
public class CloudHanController {

    private final CloudHanApplicationService cloudHanApplicationService;

    /**
     * 获取云汉页面书摘列表（支持最新/热门/分类筛选）
     * 
     * @param page 页码
     * @param pageSize 每页数量
     * @param sortType 排序方式 (latest: 最新, hot: 热门)
     * @param categoryId 分类ID（可选）
     * @param keyword 搜索关键词（可选）
     * @return 分页书摘列表
     */
    @GetMapping("/cloud-han")
    public Result<PageResultDto<CloudHanPostDto>> getCloudHanPosts(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String sortType,
            @RequestParam(required = false) Integer categoryId,
            @RequestParam(required = false) String keyword) {
        
        PageResultDto<CloudHanPostDto> result = cloudHanApplicationService.getCloudHanPosts(
            page, pageSize, sortType, categoryId, keyword);
        return Result.success(result);
    }

    /**
     * 获取云汉页面热门书摘（点赞+评论排序）
     * 
     * @param page 页码
     * @param pageSize 每页数量
     * @param categoryId 分类ID（可选）
     * @return 分页热门书摘列表
     */
    @GetMapping("/hot")
    public Result<PageResultDto<CloudHanPostDto>> getHotPosts(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) Integer categoryId) {
        
        PageResultDto<CloudHanPostDto> result = cloudHanApplicationService.getHotPosts(
            page, pageSize, categoryId);
        return Result.success(result);
    }

    /**
     * 获取云汉页面最新书摘
     * 
     * @param page 页码
     * @param pageSize 每页数量
     * @param categoryId 分类ID（可选）
     * @return 分页最新书摘列表
     */
    @GetMapping("/latest")
    public Result<PageResultDto<CloudHanPostDto>> getLatestPosts(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) Integer categoryId) {
        
        PageResultDto<CloudHanPostDto> result = cloudHanApplicationService.getLatestPosts(
            page, pageSize, categoryId);
        return Result.success(result);
    }

    /**
     * 根据分类获取云汉页面书摘
     * 
     * @param categoryId 分类ID
     * @param page 页码
     * @param pageSize 每页数量
     * @param sortType 排序方式 (latest: 最新, hot: 热门)
     * @return 分页书摘列表
     */
    @GetMapping("/category/{categoryId}")
    public Result<PageResultDto<CloudHanPostDto>> getPostsByCategory(
            @PathVariable Integer categoryId,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) String sortType) {
        
        PageResultDto<CloudHanPostDto> result = cloudHanApplicationService.getPostsByCategory(
            categoryId, page, pageSize, sortType);
        return Result.success(result);
    }

    /**
     * 搜索云汉页面书摘（书名/作者/内容模糊匹配）
     * 
     * @param keyword 搜索关键词
     * @param page 页码
     * @param pageSize 每页数量
     * @param categoryId 分类ID（可选）
     * @return 分页搜索结果
     */
    @GetMapping("/search")
    public Result<PageResultDto<CloudHanPostDto>> searchCloudHanPosts(
            @RequestParam String keyword,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer pageSize,
            @RequestParam(required = false) Integer categoryId) {
        
        PageResultDto<CloudHanPostDto> result = cloudHanApplicationService.searchCloudHanPosts(
            keyword, page, pageSize, categoryId);
        return Result.success(result);
    }

    /*
     * ========================================
     * 互动功能已迁移到 InteractionController
     * ========================================
     * 
     * 原有的点赞、收藏、评论功能已迁移到通用的 InteractionController，
     * 请前端使用以下新接口：
     * 
     * 点赞书摘：   POST /interaction/like?targetType=1&targetId={quoteId}
     * 取消点赞：   POST /interaction/unlike?targetType=1&targetId={quoteId}
     * 收藏书摘：   POST /interaction/favorite?targetType=1&targetId={quoteId}
     * 取消收藏：   POST /interaction/unfavorite?targetType=1&targetId={quoteId}
     * 获取评论：   GET  /interaction/comments?targetType=1&targetId={quoteId}
     * 添加评论：   POST /interaction/comment?targetType=1&targetId={quoteId}
     * 回复评论：   POST /interaction/reply/{commentId}
     * 
     * 注意：targetType=1 表示书摘类型
     * 
     * 这样做的好处：
     * 1. 统一了所有内容类型（书摘、小说、章节）的互动接口
     * 2. 减少了重复代码
     * 3. 便于维护和扩展
     */
}
